!> 这个示例程序使用了牛顿迭代法求解方程 x^3 - 2x - 5 = 0 的根。程序中的变量含义如下：
!> - x0：迭代的初始值
!> - x：每次迭代得到的新值
!> - f：方程的函数值
!> - df：方程的导数值
!> - max_iter：最大迭代次数
!> 在程序中，我们使用了一个 do 循环来进行迭代计算，直到满足精度要求或达到最大迭代次数为止。最后，程序输出求得的根。
program newton_iteration

    use display_module, only: display
    implicit none
    real :: x0, x, f, df, eps

    ! 设置初始值和最大迭代次数
    x0 = 1.0
    eps = sqrt(epsilon(1.0))

    ! not set the maximum number of iterations this time
    do
        f = x0**3 - 2*x0 - 5
        df = 3*x0**2 - 2
        x = x0 - f/df ! 牛顿迭代法公式: x_{n+1} = x_n - f(x_n)/f'(x_n)
        if (abs(x - x0) < eps) exit
        x0 = x
    end do

    ! 输出结果
    call display(x, 'root:')
    call display(f, 'f(root):')

end program newton_iteration
!> [scalar] root:
!>  2.095E+00
!> [scalar] f(root):
!>  7.057E-05
